#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int max = 9;
typedef struct hash {
    int size;
    int capacity;
    int* data;
}hash;
hash* init();
void add(hash* ha, int value);
void show(hash* ha);
int search(hash* ha, int value);

int main()
{
    hash* ha = init();
     add(ha, 4);
     printf("%d\n",search(ha,4));
     add(ha, 13);
    //  add(ha, 13);
    //  add(ha, 13);
    //  add(ha, 13);
    //  add(ha, 13);
    //  add(ha, 13);
     add(ha, 0);
     add(ha, 45);
     add(ha, 10);
     printf("%d\n", search(ha, 0));
     show(ha);
    return 0;
}

hash* init()
{
    hash* tmp = (hash *)malloc(sizeof(hash));
    tmp->size = 0;
    tmp->capacity = 13;
    tmp->data = (int *)malloc(sizeof(int) * (tmp->capacity) );
    // printf("%p \n", tmp);
    memset(tmp->data, -1, sizeof(int) * tmp->capacity);
    return tmp;
}

void add(hash* ha, int value)
{
    //符合要求
    if (ha->size < max)
    {
        int i = value % (ha->capacity);
        int j = value;
        while (ha->data[i] != -1)
        {
            j++;
            i = j % (ha->capacity);
        }
        ha->data[i] = value;
        ha->size++;
    }
    // 扩容不会写
    // else{
    //     max *= 2;
    //     ha->capacity *= 2;
    //     ha = realloc(ha,sizeof(int) * (ha->capacity));
    //     memset((ha->data)+sizeof(int)*(ha->capacity/2), -1, sizeof(int) * ha->capacity);
    //     printf("%p \n", ha);
    //     int i = value % (ha->capacity);
    //     int j = value;
    //     while (ha->data[i] != -1)
    //     {
    //         j++;
    //         i = j % (ha->capacity);
    //     }
    //     ha->data[i] = value;
    //     ha->size++;
    // }
}

int search(hash* ha, int value)
{
    int i = value % (ha->capacity);
    int j = i;
    while (ha->data[i] != value)
    {
        if (ha->data[i] == -1)
            return -1;
        j++;
        i = j % (ha->capacity);
    }
    return i;
}
void show(hash* ha)
{
    for (int i = 0; i < ha->capacity; i++)
    {
        printf("%d ---  %d\n", i, ha->data[i]);
    }
}